/**
 * 
 */
package co.gov.mintic.Biblioteca.vo;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;

import org.xmlpull.v1.XmlPullParserException;

import android.os.Environment;
import co.gov.mintic.Biblioteca.beans.Registro;
import co.gov.mintic.Biblioteca.constants.Constants;
import co.gov.mintic.Biblioteca.util.Util;

public class ConsultarLibro {

	/**
	 * 
	 * @param searchCriteria
	 * @param value
	 * @return
	 * @throws XmlPullParserException
	 */
	public static ArrayList<Registro> getLibrosBySearchCriteria(
			String searchCriteria, String value) throws XmlPullParserException {

		ArrayList<Registro> registros = null;

		File tarjeta = Environment.getExternalStorageDirectory();
		File file = new File(tarjeta.getAbsolutePath()
				+ Constants.EXTERNAL_DIRECTORY, Constants.EXTERNAL_FILE);
		registros = new ArrayList<Registro>();

		String titulo = "";
		String autor = "";
		String tema = "";
		String descripcion = "";
		String fuente = "";

		try {

			FileInputStream fIn = new FileInputStream(file);
			InputStreamReader archivo = new InputStreamReader(fIn);
			BufferedReader br = new BufferedReader(archivo);
			String linea = br.readLine();
			value = value != null ? value.toLowerCase() : "";
			searchCriteria = searchCriteria != null ? searchCriteria
					.toLowerCase() : "";

			while (linea != null) {

				linea = linea.toLowerCase();

				if (linea.indexOf(Constants.TITULO) > 0) {
					titulo = linea;
				} else if (linea.indexOf(Constants.AUTOR) > 0) {
					autor = linea;
				} else if (linea.indexOf(Constants.TEMA) > 0) {
					tema = linea;
				} else if (linea.indexOf(Constants.DESCRIPCION) > 0) {
					descripcion = linea;
				} else if (linea.indexOf(Constants.FUENTE) > 0) {
					fuente = linea;
				}

				if (linea.indexOf(searchCriteria) > 0
						&& linea.indexOf(value) > 0) {
					Registro registro = new Registro();
					registro.setTitulo(Util.getDataFromTag(titulo));

					if (searchCriteria.equals(Constants.TITULO)
							|| searchCriteria.equals(Constants.AUTOR)
							|| searchCriteria.equals(Constants.TEMA)
							|| searchCriteria.equals(Constants.DESCRIPCION)) {

						while (!Constants.END_RECORD.equals(linea)) {

							if (linea.indexOf(Constants.AUTOR) > 0) {
								autor = linea;
							} else if (linea.indexOf(Constants.TEMA) > 0) {
								tema = linea;
							} else if (linea.indexOf(Constants.DESCRIPCION) > 0) {
								descripcion = linea;
							} else if (linea.indexOf(Constants.FUENTE) > 0) {
								fuente = linea;
							}

							linea = br.readLine();
							linea = linea.toLowerCase();
						}

					}

					registro.setAutor(Util.getDataFromTag(autor));
					registro.setTema(Util.getDataFromTag(tema));
					registro.setDescripcion(Util.getDataFromTag(descripcion));
					registro.setFuente(Util.getDataFromTag(fuente));

					registros.add(registro);

					titulo = "";
					autor = "";
					tema = "";
					descripcion = "";
					fuente = "";
					registro = null;
				}

				linea = br.readLine();
			}
			br.close();
			archivo.close();

		} catch (IOException e) {

		}

		return registros;
	}
}
